<?php 
set_time_limit(0);



class WPBot {

  public $config = array();
  public $link   =  '' ; //URL 
  public $tutucu = '' ; 
  public $kat = array();
  public $wp_cat = NULL; //Wordpress Kategori değişkeni.
  public static $instance ; //Singleton
  public $select_cat ; 
  public $exploitFileSavePath = NULL;
  private     $descArr  = array();
  private    $desctitle = array();
  private    $Exploit   = array();

   /**
   * Yeter Bu kadar Hazır Config :) 
   */



 public  function __construct()
 {
   //Class içinde kullanacağımız gerekli dış gereksinimleri  kontrol ediyoruz.
   if(PHP_VERSION > "5.0.0") : else :  exit("Hata : Not Supported PHP VERSION"); endif;
   if(is_null($this->exploitFileSavePath)) : $this->exploitFileSavePath =  './exploit/script/'; endif;
   if(!file_exists($this->exploitFileSavePath)) : 
   	if(mkdir($this->exploitFileSavePath,644,true)) : 
   		 return true;
   		endif;
   		if(!is_writable($this->exploitFileSavePath)):
		die("Dosya Yazılabilir Değil !");
   	endif;
  endif; 
 }

/* İnstanceOf */ 

  public static function Instance()
   {
     if(!isset(self::$instance)) {
				self::$instance = new WPBot(); 
			}
     			return  self::$instance;
   }


   /* Curl Bağlantı methodu */ 

 private function  _curl_connect()
 {

   $this->config = array(
           CURLOPT_BINARYTRANSFER => true,
           CURLOPT_REFERER        => 'www.google.com.tr',
           CURLOPT_RETURNTRANSFER => TRUE,
           CURLOPT_USERAGENT      => 'Googlebot/2.1 (+http://www.google.com/bot.html)',
           CURLOPT_URL            => $this->link,
           CURLOPT_FOLLOWLOCATION => TRUE 
   	) ; //CURL options 
   $this->tutucu = curl_init();
   curl_setopt_array($this->tutucu, $this->config);
   $data = curl_exec($this->tutucu);
   return $data ; //Curl Session return Data
  }


 /**
 * Kategori Setter.
 */
 public function _set_cat()
 {
    $this->cat = array(
           'remote' => 'www.exploit-db.com/remote/',
           'local'  => 'www.exploit-db.com/local/',
           'dos'    => 'www.exploit-db.com/dos/',
           'shellcode' => 'www.exploit-db.com/shellcode/'
    	);
    return $this->cat;

 }





 /*
   Linke Bağlanır ve linkten Exploit Alır.
 */
 public function  DownloadLinkGetting()
 {
 	$kat = "";
    //Kategoriler set edildi.
     self::_set_cat();
     //Dlinks Array();
     $dlinkarr = array();

     //Option alalım :) 
     //Eğer kategori seçilmemiş ise , dizideki ilk kategoriyi al . 
    
     if(!isset($this->select_cat))
     {
     	 //Eğer ilk nesne seçildi  ise wordpress veritabanında taslak(draft) olarak kaydet.
       
        $kat =  current($this->cat);
     }



    $this->link = $kat;
    
    $data = self::_curl_connect(); //Curl İle Kategoriye bağlanıldı. 
    
    //Exploit Download Linkleri alındı. 
    preg_match_all('#<td class="list_explot_dlink">(.*?)<\/td>#si',$data,$match);
 
     
    /* Download Linklerini aldık */ 
    foreach($match[0] as $val)
    {
    	 preg_match('/href=\"(.*?)\"/i',$val,$dlinks);
         array_push($dlinkarr,$dlinks[1]);
    } 
      
  //Ünlü $i miz :D 
       $i  = 0 ;
      
  /* Tüm Linkleri tek tek aç Daha sonra txt Dosyaya Kaydet */
     
       while(count($dlinkarr)) {
            //$i eşitse veya büyükse diziden exit vererek döngüden defol :) 
            if($i >= 2 /*count($dlinkarr)*/ ) : exit(); endif;

           $this->link = $dlinkarr[$i];
           $downloadLinkSave = self::_curl_connect();
           self::LinkToSaveFormyFolder($downloadLinkSave);
           $i++;
      } 
    }//End Of Line exploitAl();


 // Exploit'i alır kaydeder :) Rasgele sayı üretir.
  private function LinkToSaveFormyFolder($file)
  {
     //Dosya adı yerine rasgele sayı oluşturuldu.
     $randomNumber = rand(0,99999);
     $fileWrite =  file_put_contents($this->exploitFileSavePath.$randomNumber. '.txt',$file);

  }





  public function FindFetchSaved()
  {
  	 //kategorileri Set ettik . 
     self::_set_cat();
     $this->link = current($this->cat);
     $data = self::_curl_connect();
     //Regex ile alıyoruz.
     preg_match_all('#<td class="list_explot_description">(.*?)<\/td>#si',$data,$match);
     


     /* Link Ve Açıklamalar Alındı */
      foreach($match[0] as $val)
      { 
      	 preg_match('/href=\"(.*?)\">(.*?)<\/a>/i',$val,$desclink);
         $exploit_link = array_push($this->descArr,$desclink[1]);
         $exploit_desc = array_push($this->desctitle,$desclink[2]);
      }



    /* Exploitler alındı */

     foreach($this->descArr as $links)
     {
       
        $this->link = $links;
        $data = self::_curl_connect();
        preg_match('#<pre class="(.*?)">(.*?)</pre>#si',$data,$exploit);
        array_push($this->Exploit,$exploit[0]);
     }

   
     /**Ekleme Fonksiyonu */ 



  }






} // End Of Class





$a  = WPBot::Instance();
$a->FindFetchSaved();

//TODO:Çekilen Exploitler tekrar çekiliyor Bu açığı gider.


















?> 